package com.zyh.em.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.HashMap;
import java.util.Map;
@Data
@AllArgsConstructor
@NoArgsConstructor
/**
 * 评估报告
 * 包括两部分：基础信息+评估因子对应的评估结果
 */
public class EvaluateReport {
    private long time;//时间戳
    private String appName;//应用名
    private String username;//用户名
    private String uuid;//登录的唯一标记
    private String city;//登录地
    private GeoPoint geoPoint;//地理位置

    private Map<String,Boolean> riskFactor=new HashMap<>();//风险因子，key:就是评估因子，value就是是否有风险标记

    //给六个Boolean类型的评估因子赋值
    public void setRiskFactor(String factor,boolean isRisk){
        riskFactor.put(factor,isRisk);
    }

    //省略了get/set 有参无参构造方法
    /**
     * 生成一个用空格连接的数据信息
     * @return
     */
    @Override
    public String toString() {

        StringBuffer buffer=new StringBuffer();
        buffer.append(time+" ");
        buffer.append(appName+" ");
        buffer.append(username+" ");
        buffer.append(uuid+" ");
        buffer.append(city+" ");
        buffer.append(geoPoint.getLongitude()+","+geoPoint.getLatitude()+" ");

        //riskFactor这个属性，先根据key进行排序，然后再获取到对应的value，把value用空格拼接在一起
        String riskFactorValueString = riskFactor
                .keySet()//获取到map中的所有key
                .stream()//java中的流计算
                .sorted()//默认升序排列
                .map(key -> riskFactor.get(key))//根据每一个key获取到对应的value
                .map(value -> value + "")//把boolean类型转换成字符串
                .reduce((v1, v2) -> v1 + " " + v2)
                .orElse("");

        buffer.append(riskFactorValueString);

        return buffer.toString();
    }
}

